package cn.walls1717.juc.lockup;

import lombok.extern.slf4j.Slf4j;
import org.openjdk.jol.info.ClassLayout;

/**
 * 锁升级测试
 *
 * 几种锁：<br>
 * 偏向锁：单线程竞争 <br>
 * 1.当线程A第一次竞争到锁时，通过操作修改Mark Word中的偏向线程ID、偏向模式如果不存在其他线程竞争，那么持有偏向锁的线程将永远不需要进行同步。 <br>
 * 2.当一段同步代码一直同一个线程多次访问，由于只有一个线程那么该线程在后续访问时便会自动获得锁。 <br>
 * 3.偏向锁会偏向于第一个访问锁的线程，如果在接下来的运行过程中，该锁没有被其他的线程访问，则持有偏向锁的线程将永远不需要触发同步。也即偏向锁在资源没有竞争情况下消除了同步语句，懒的连CAS操作都不做了，直接提高程序性能。 <br>
 *
 * @author walls1717
 * @create 2022/12/16 12:09
 **/
@Slf4j
public class SynchronizedUpDemo {

    public static void main(String[] args) {
        Object o = new Object();
        synchronized (o) {
            System.out.println(ClassLayout.parseInstance(o).toPrintable());
        }
    }

    private static void noLock() {
        Object o = new Object();
        System.out.println(o.hashCode());
        System.out.println(ClassLayout.parseInstance(o).toPrintable());
    }
}
